package com.xuxu.subscribe.plus;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xuxu.util.RabbitConnectionUtil;

/**
 * 发布者/订阅者模式 Publish/Subscribe
 *
 * 发布者/订阅者模式的交换机类型是 fanout
 *
 * 发布者和队列没有直接关系，发布者是发布消息给交换机，然后通过交换机然后绑定消费者的消息队列，消费者才获取到消息的。
 * 所以在开发中，发布者（生产者）不需要声明队列，只需要声明交换机就可以了。
 * 然后在消费者声明交换机、声明队列，然后绑定交换机，就可以了
 */
public class Producer_Plus {
    //定义交换机名称
    static final String FANOUT_EXCHANGE = "fanout_exchange";

    public static void main(String[] args) throws Exception {
        //获取RabbitMQ连接对象
        Connection connection = RabbitConnectionUtil.getConnection();

        //创建频道对象
        Channel channel = connection.createChannel();

        //声明交换机
        /*
            参数一：交换机名称
            参数二：交换机类型是 fanout
         */
        channel.exchangeDeclare(FANOUT_EXCHANGE, BuiltinExchangeType.FANOUT);


        //发送消息
        for (int i = 1; i <= 10; i++) {
            String message = "🐶🐶🐶🐶🐶🐶 第 " + i + "条消息";
            //执行发送
            /*
                参数一：交换机名称
                参数二：队列名称
                参数三：其他消息属性
                参数四：发送的消息内容
             */
            channel.basicPublish(FANOUT_EXCHANGE, "", null, message.getBytes());

            System.out.println("已发送：" + message);
        }
        //关闭频道
        channel.close();
        //关闭连接
        connection.close();
    }
}
